% 通过角谱传输的方法计算光束传输一段距离的菲涅尔衍射
function U_out = Fresnel_Diffraction(U_in, delta_z, lambda, fx, fy, D)
% U_in: 输入的复振幅光场
% delta_z: 传输的距离
% lambda: 光波波长
% fx/fy: 直角坐标下的频率域

% 菲涅尔衍射的传递函数，省略了一项导致相位整体位移的活塞项
H_Fresnel = exp(-1i*pi*lambda*delta_z*(fx.^2+fy.^2));
N = length(fx);
deltax = D/N;
% 在频域计算衍射光场
U_out = ift2(ft2(U_in,deltax).*H_Fresnel,1/(N*deltax));
% U_out = ifftshift(ifft2(ifftshift(fft2(fftshift(fftshift(U_in))).*H_Fresnel)));

% end of the function
end